perm filename RANGE.SAI[PIC,HE] blob
sn#430342 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY RANGE
C00005 ENDMK
C⊗;
ENTRY RANGE;
BEGIN "RANGE"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
IFC STANFORD THENC REQUIRE "TENEXIO.SAI" SOURCE!FILE; ENDC
INTERNAL PROCEDURE RANGE(INTEGER BUF; REFERENCE INTEGER AMINB,AMAXB,MINB,MAXB,AVGB; REAL FRAC; BOOLEAN MULTIRANGE);
BEGIN "RANGER"
! VARIABLE DECLARATIONS;
INTEGER I,J,SUMB,PERPIC,PERTEST,PICUSE,PIXTOT,FLG,ISTOP,JSTOP,PNTR,BYT;
SAFE INTEGER ARRAY PIXELS[0:BYT←2↑BYTSZ(BUF)-1];
STRING FILNAM,STEMP;
ISTOP←ROWS(BUF);
JSTOP←COLMS(BUF);
limit(buf,pixels,aminb,amaxb,sumb,0,0);
DO BEGIN "RANGDAT"
MINB←AMINB;
MAXB←AMAXB;
PERPIC←(PIXTOT←ISTOP*JSTOP)*FRAC;
! NOW ADJUST MAX AND MIN TO SUIT DYNAMIC RANGE;
IF FRAC>.000001 THEN
BEGIN
PERTEST←PIXELS[AMINB];
WHILE PERTEST < PERPIC DO
BEGIN
MINB←MINB+1;
PERTEST←PERTEST+PIXELS[MINB];
END;
PERTEST←PIXELS[AMAXB];
WHILE PERTEST < PERPIC DO
BEGIN
MAXB←MAXB-1;
PERTEST←PERTEST+PIXELS[MAXB];
END;
END;
IF AMAXB = AMINB THEN PRINT("ARRGH! ALL THE VALUES ARE ",AMINB,"I GIVE UP",CRLF);
AVGB←SUMB/PIXTOT;
IF MULTIRANGE THEN
BEGIN
PRINT("AMINB= ",AMINB,CRLF,
"AMAXB= ",AMAXB,CRLF,
"MINB= ",MINB,CRLF,
"MAXB= ",MAXB,CRLF,
"AVGB= ",AVGB,CRLF);
PRINT("CUTOFF PERCENTAGE: ");
IF STEMP←INTTY THEN FRAC←REALSCAN(STEMP,0)
ELSE MULTIRANGE←FALSE;
END;
END "RANGDAT"
UNTIL NOT MULTIRANGE;
END "RANGER";
END "RANGE";